home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / experiments / prog_pld.lua < prev   
Encoding:
Text File  |  2005-07-16  |  15.4 KB  |  363 lines

  1.  
  2. local npldiku=27;
  3. local dxklec=5;
  4. local dyklec=6;
  5.  
  6. local pldnic=0;
  7. local pldjdu=1;
  8. local pldjsem=2;
  9. local pldodch=3;
  10. local pldzust=4;
  11. local pldzed=5;
  12.  
  13. -- -----------------------------------------------------------------
  14. function initPldici(leader)
  15.     leader.pldik = {}
  16.     for i = 0, npldiku - 1 do
  17.         leader.pldik[i] = {}
  18.         leader.pldik[i].xs = 0
  19.         leader.pldik[i].ys = 0
  20.         leader.pldik[i].cinnost = 0
  21.         leader.pldik[i].faze = 0
  22.         leader.pldik[i].smer = 0
  23.         leader.pldik[i].delit = 0
  24.         leader.pldik[i].otec = 0
  25.     end
  26.     leader.klec = {}
  27.     for i = 0, dxklec + 1 do
  28.         leader.klec[i] = {}
  29.     end
  30.  
  31.  
  32.     for i = 0, npldiku - 1 do
  33.         getModelsTable()[leader.index + i].afaze = 36
  34.         getModelsTable()[leader.index + i]:updateAnim()
  35.     end
  36.     for x = 0, dxklec + 1 do
  37.         for y = 0, dyklec + 1 do
  38.             if x == 0 or x > dxklec or y == 0 or y > dyklec or x == 3 and y >= 4 then
  39.                 leader.klec[x][y] = pldzed
  40.             else
  41.                 leader.klec[x][y] = pldnic
  42.             end
  43.         end
  44.     end
  45.     getModelsTable()[leader.index + 12].afaze = 0
  46.     getModelsTable()[leader.index + 12]:updateAnim()
  47.     leader.pocet = 1
  48.     leader.pldik[0].xs = 3
  49.     leader.pldik[0].ys = 1
  50.     leader.pldik[0].cinnost = 0
  51.     leader.pldik[0].faze = 0
  52.     leader.pldik[0].delit = random(200) + 200
  53. end
  54.  
  55. -- -----------------------------------------------------------------
  56. function fazeplda(leader, x, y, anim)
  57.     local p
  58.     p = (x - 1) * dyklec + y
  59.     if p > 15 then
  60.         p = p - 3
  61.     end
  62.     if p > npldiku or p <= 0 then
  63.         print("SCRIPT_WARNING out of array; p="..p.."; x="..x.."; y="..y.."; anim="..anim)
  64.     else
  65.         p = leader.index + p - 1
  66.         getModelsTable()[p].afaze = anim
  67.         getModelsTable()[p]:updateAnim()
  68.     end
  69. end
  70. -- -----------------------------------------------------------------
  71. function progPldici(leader)
  72.     local nx
  73.     local musibyt, kliddole, volnovedle
  74.     local sm
  75.     local pldik = leader.pldik
  76.     local klec = leader.klec
  77.  
  78.     for i = 0, npldiku - 1 do
  79.         getModelsTable()[leader.index + i].afaze = 36
  80.         getModelsTable()[leader.index + i]:updateAnim()
  81.     end
  82.     for i = 0, leader.pocet - 1 do
  83.         selected = pldik[i]
  84.         if selected.delit > 0 then
  85.             selected.delit = selected.delit - 1
  86.         else
  87.             selected.delit = 10 + random(10)
  88.         end
  89.         musibyt = klec[selected.xs][selected.ys] == pldzust
  90.         kliddole = klec[selected.xs][selected.ys + 1] == pldjsem or klec[selected.xs][selected.ys + 1] == pldzed
  91.         sm = random(2)
  92.         switch(sm){
  93.             [1] = function()
  94.                 nx = selected.xs - 1
  95.             end,
  96.             [0] = function()
  97.                 nx = selected.xs + 1
  98.             end,
  99.         }
  100.         switch(selected.cinnost){
  101.             [0] = function()
  102.                 if klec[selected.xs][selected.ys + 1] == 0 then
  103.                     selected.cinnost = 1
  104.                     selected.faze = 0
  105.                     klec[selected.xs][selected.ys] = pldodch
  106.                     klec[selected.xs][selected.ys + 1] = pldjdu
  107.                     fazeplda(leader, selected.xs, selected.ys, 20)
  108.                     fazeplda(leader, selected.xs, selected.ys + 1, 19)
  109.                 elseif kliddole and selected.delit == 0 and klec[nx][selected.ys] == 0 then
  110.                     selected.delit = random(300) + 100
  111.                     selected.cinnost = 2
  112.                     selected.faze = 0
  113.                     selected.smer = sm
  114.                     klec[selected.xs][selected.ys] = pldjsem
  115.                     if klec[selected.xs][selected.ys + 1] == pldjsem then
  116.                         klec[selected.xs][selected.ys + 1] = pldzust
  117.                     end
  118.                     pldik[leader.pocet].xs = nx
  119.                     pldik[leader.pocet].ys = selected.ys
  120.                     pldik[leader.pocet].cinnost = 3
  121.                     pldik[leader.pocet].faze = 0
  122.                     pldik[leader.pocet].smer = sm
  123.                     pldik[leader.pocet].delit = random(300) + 100
  124.                     pldik[leader.pocet].otec = i
  125.                     klec[nx][selected.ys] = pldjdu
  126.                     fazeplda(leader, selected.xs, selected.ys, 4 - sm)
  127.                     fazeplda(leader, nx, selected.ys, 36)
  128.                     leader.pocet = leader.pocet + 1
  129.                 elseif random(100) < 4 and kliddole and not musibyt then
  130.                     if klec[nx][selected.ys] == 0 and (klec[nx][selected.ys + 1] == 2 or klec[nx][selected.ys + 1] == 5) then
  131.                         selected.cinnost = 4
  132.                         selected.faze = 0
  133.                         selected.smer = sm
  134.                         klec[selected.xs][selected.ys] = pldodch
  135.                         klec[nx][selected.ys] = pldjdu
  136.                         fazeplda(leader, selected.xs, selected.ys, 4 - sm)
  137.                     elseif klec[nx][selected.ys] == 0 and klec[nx][selected.ys + 1] == 0 then
  138.                         selected.cinnost = 5
  139.                         selected.faze = 0
  140.                         selected.smer = sm
  141.                         klec[selected.xs][selected.ys] = pldodch
  142.                         klec[nx][selected.ys] = pldjdu
  143.                         fazeplda(leader, selected.xs, selected.ys, 10 + sm * 18)
  144.                     elseif (klec[nx][selected.ys] == pldjsem or klec[nx][selected.ys] == pldzed) and klec[selected.xs][selected.ys - 1] == 0 and klec[nx][selected.ys - 1] == 0 then
  145.                         selected.cinnost = 6
  146.                         selected.faze = 0
  147.                         selected.smer = sm
  148.                         if klec[nx][selected.ys] == pldjsem then
  149.                             klec[nx][selected.ys] = pldzust
  150.                         end
  151.                         klec[selected.xs][selected.ys] = pldodch
  152.                         klec[selected.xs][selected.ys - 1] = pldjdu
  153.                         fazeplda(leader, selected.xs, selected.ys, 18)
  154.                     else
  155.                         fazeplda(leader, selected.xs, selected.ys, selected.faze)
  156.                     end
  157.                 else
  158.                     if random(100) < 10 then
  159.                         selected.faze = random(5)
  160.                     end
  161.                     if random(100) < 2 then
  162.                         fazeplda(leader, selected.xs, selected.ys, 5)
  163.                     else
  164.                         fazeplda(leader, selected.xs, selected.ys, selected.faze)
  165.                     end
  166.                 end
  167.             end,
  168.             [1] = function()
  169.                 if selected.faze == 0 then
  170.                     klec[selected.xs][selected.ys] = 0
  171.                     selected.ys = selected.ys + 1
  172.                     klec[selected.xs][selected.ys] = pldodch
  173.                     fazeplda(leader, selected.xs, selected.ys, 2)
  174.                     selected.faze = selected.faze + 1
  175.                 else
  176.                     switch(klec[selected.xs][selected.ys + 1]){
  177.                         [0] = function()
  178.                             klec[selected.xs][selected.ys] = pldodch
  179.                             klec[selected.xs][selected.ys + 1] = pldjdu
  180.                             fazeplda(leader, selected.xs, selected.ys, 20)
  181.                             fazeplda(leader, selected.xs, selected.ys + 1, 19)
  182.                             selected.faze = selected.faze - 1
  183.                         end,
  184.                         [1] = function()
  185.                             klec[selected.xs][selected.ys] = pldodch
  186.                             fazeplda(leader, selected.xs, selected.ys, 2)
  187.                             selected.cinnost = 0
  188.                             selected.faze = 2
  189.                         end,
  190.                         [3] = function()
  191.                             klec[selected.xs][selected.ys] = pldodch
  192.                             fazeplda(leader, selected.xs, selected.ys, 2)
  193.                             selected.cinnost = 0
  194.                             selected.faze = 2
  195.                         end,
  196.                         default = function()
  197.                             selected.cinnost = 0
  198.                             selected.faze = 0
  199.                             klec[selected.xs][selected.ys] = pldjsem
  200.                             fazeplda(leader, selected.xs, selected.ys, 18)
  201.                         end,
  202.                     }
  203.                 end
  204.             end,
  205.             [3] = function()
  206.                 selected.faze = selected.faze + 1
  207.                 switch(selected.faze){
  208.                     [4] = function()
  209.                         fazeplda(leader, selected.xs, selected.ys, 14 + selected.smer * 18)
  210.                         klec[selected.xs][selected.ys] = pldjsem
  211.                     end,
  212.                     [16] = function()
  213.                         selected.cinnost = 0
  214.                         selected.faze = 0
  215.                         fazeplda(leader, selected.xs, selected.ys, 0)
  216.                         pldik[selected.otec].cinnost = 0
  217.                         fazeplda(leader, pldik[selected.otec].xs, pldik[selected.otec].ys, 4 - selected.smer)
  218.                         if klec[pldik[selected.otec].xs][pldik[selected.otec].ys + 1] == 4 then
  219.                             klec[pldik[selected.otec].xs][pldik[selected.otec].ys + 1] = 2
  220.                         end
  221.                     end,
  222.                     [21] = function()
  223.                         fazeplda(leader, selected.xs, selected.ys, 17 + selected.smer * 18)
  224.                         if random(100) < 20 then
  225.                             selected.faze = 15
  226.                         else
  227.                             selected.faze = selected.faze - 1
  228.                         end
  229.                     end,
  230.                     default = function()
  231.                         if 1 <= selected.faze and selected.faze <= 3 then
  232.                             fazeplda(leader, selected.xs, selected.ys, 12 + selected.smer * 18)
  233.                         elseif 5 <= selected.faze and selected.faze <= 6 then
  234.                             fazeplda(leader, selected.xs, selected.ys, 14 + selected.smer * 18)
  235.                         elseif 7 <= selected.faze and selected.faze <= 9 then
  236.                             fazeplda(leader, selected.xs, selected.ys, 15 + selected.smer * 18)
  237.                         elseif 10 <= selected.faze and selected.faze <= 15 then
  238.                             fazeplda(leader, selected.xs, selected.ys, 16 + selected.smer * 18)
  239.                             if random(100) < 10 then
  240.                                 selected.faze = 20
  241.                             end
  242.                         end
  243.                     end,
  244.                 }
  245.             end,
  246.             [2] = function()
  247.                 if random(100) < 4 then
  248.                     fazeplda(leader, selected.xs, selected.ys, 13 + selected.smer * 18)
  249.                 else
  250.                     fazeplda(leader, selected.xs, selected.ys, 11 + selected.smer * 18)
  251.                 end
  252.             end,
  253.             [4] = function()
  254.                 selected.faze = selected.faze + 1
  255.                 switch(selected.smer){
  256.                     [0] = function()
  257.                         nx = selected.xs + 1
  258.                     end,
  259.                     [1] = function()
  260.                         nx = selected.xs - 1
  261.                     end,
  262.                 }
  263.                 switch(selected.faze){
  264.                     [1] = function()
  265.                         fazeplda(leader, selected.xs, selected.ys, 6 + selected.smer * 18)
  266.                         fazeplda(leader, nx, selected.ys, 7 + selected.smer * 18)
  267.                     end,
  268.                     [2] = function()
  269.                         fazeplda(leader, selected.xs, selected.ys, 8 + selected.smer * 18)
  270.                         fazeplda(leader, nx, selected.ys, 9 + selected.smer * 18)
  271.                     end,
  272.                     [3] = function()
  273.                         klec[selected.xs][selected.ys] = 0
  274.                         selected.xs = nx
  275.                         klec[selected.xs][selected.ys] = pldjsem
  276.                         fazeplda(leader, selected.xs, selected.ys, 0)
  277.                         selected.cinnost = 0
  278.                         selected.faze = 0
  279.                     end,
  280.                 }
  281.             end,
  282.             [5] = function()
  283.                 selected.faze = selected.faze + 1
  284.                 switch(selected.smer){
  285.                     [0] = function()
  286.                         nx = selected.xs + 1
  287.                     end,
  288.                     [1] = function()
  289.                         nx = selected.xs - 1
  290.                     end,
  291.                 }
  292.                 switch(selected.faze){
  293.                     [1] = function()
  294.                         fazeplda(leader, selected.xs, selected.ys, 10 + selected.smer * 18)
  295.                     end,
  296.                     [2] = function()
  297.                         fazeplda(leader, selected.xs, selected.ys, 10 + selected.smer * 18)
  298.                     end,
  299.                     [3] = function()
  300.                         fazeplda(leader, selected.xs, selected.ys, 21 + selected.smer)
  301.                         fazeplda(leader, nx, selected.ys, 22 - selected.smer)
  302.                     end,
  303.                     [4] = function()
  304.                         klec[selected.xs][selected.ys] = 0
  305.                         selected.xs = nx
  306.                         klec[selected.xs][selected.ys] = pldodch
  307.                         fazeplda(leader, selected.xs, selected.ys, 2)
  308.                         selected.cinnost = 1
  309.                         selected.faze = 1
  310.                     end,
  311.                 }
  312.             end,
  313.             [6] = function()
  314.                 selected.faze = selected.faze + 1
  315.                 switch(selected.smer){
  316.                     [0] = function()
  317.                         nx = selected.xs + 1
  318.                     end,
  319.                     [1] = function()
  320.                         nx = selected.xs - 1
  321.                     end,
  322.                 }
  323.                 switch(selected.faze){
  324.                     [1] = function()
  325.                         fazeplda(leader, selected.xs, selected.ys - 1, 20)
  326.                         fazeplda(leader, selected.xs, selected.ys, 19)
  327.                     end,
  328.                     [2] = function()
  329.                         klec[selected.xs][selected.ys] = 0
  330.                         selected.ys = selected.ys - 1
  331.                         klec[selected.xs][selected.ys] = pldodch
  332.                         if klec[nx][selected.ys] == 0 then
  333.                             fazeplda(leader, selected.xs, selected.ys, 21 + selected.smer)
  334.                             fazeplda(leader, nx, selected.ys, 22 + selected.smer)
  335.                             klec[nx][selected.ys] = pldjdu
  336.                         else
  337.                             selected.cinnost = 1
  338.                             selected.faze = 1
  339.                             fazeplda(leader, selected.xs, selected.ys, 2)
  340.                             if klec[nx][selected.ys + 1] == 4 then
  341.                                 klec[nx][selected.ys + 1] = 2
  342.                             end
  343.                         end
  344.                     end,
  345.                     [3] = function()
  346.                         klec[selected.xs][selected.ys] = 0
  347.                         selected.xs = nx
  348.                         klec[selected.xs][selected.ys] = pldjsem
  349.                         fazeplda(leader, selected.xs, selected.ys, 18)
  350.                         selected.cinnost = 0
  351.                         selected.faze = 0
  352.                         if klec[selected.xs][selected.ys + 1] == 4 then
  353.                             klec[selected.xs][selected.ys + 1] = 2
  354.                         end
  355.                     end,
  356.                 }
  357.             end,
  358.         }
  359.     end
  360. end
  361.  
  362.  
  363.